home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / telecomm / uwsrc.arc / RESETAUX.S < prev    next >
Text File  |  1989-04-29  |  2KB  |  48 lines

  1. /
  2. / Reset the Aux rs232 port.  Usage:
  3. /    char    *rs232_iorec = Iorec(0);    /* Do this first    */
  4. /
  5. /    if (rs232_reset())
  6. /        Cauxout(0x11);            /* sent an XOFF        */
  7. /
  8. / This subroutine was written by Martin Minow, Arlington, MA
  9. / and is in the public domain.
  10. /
  11. /    .shrd                / Public data
  12. /    .globl    rs232_iorec_        / -> aux io record. see below
  13.     .shri                / Public instructions
  14.     .globl    rs232_reset_
  15.  
  16. rs232_reset_:
  17.     move.l    d2,-(sp)        / Save a scratch register
  18.     clr.l    -(sp)            / Super(0L) switches to super mode
  19.     move.w    $0x20,-(sp)        / Super opcode
  20.     trap    $1            / Call TOS
  21.     addq.l    $6,sp            / Clear stack
  22.     move.l    d0,-(sp)        / Save old stack for now.
  23. /
  24. / If you don't already have the iorec as a readily-available global,
  25. / uncomment the following code (which is, of course, untested)
  26. /
  27.     clr.w    -(sp)            / Aux port is device zero
  28.     move.w    $14,-(sp)        / Iorec
  29.     trap    $14            / Xbios(14)
  30.     addq.l    $4,sp            / Clear stack
  31. / End of "get iorec" code. We already have this information:
  32. /    movea    rs232_iorec_,a0        / a0 -> I/O record
  33.     movea    d0,a0            / a0 -> I/O record
  34.     move    sr,-(sp)        / Save cpu status
  35.     ori    $0x700,sr        / Disable interrupts
  36. /    clr.l    6(a0)            / Clear input  head, tail -- crashes!
  37.     clr.l    20(a0)            / Clear output head, tail
  38.     clr.l    d2            / Clear result
  39.     or.b    30(a0),d2        / Get old rcv xoff state
  40.     clr.w    30(a0)            / Cancel rcv, xmt xoff states
  41.     move    (sp)+,sr        / Enable interrupts
  42.     move.w    $0x20,-(sp)        / Super -- old_stack is still at (sp)
  43.     trap    $1            / Exit super mode
  44.     addq    $6,sp            / Clean junk from stack
  45.     move.l    d2,d0            / Get result
  46.     move.l    (sp)+,d2        / Restore d2    
  47.     rts                / Exit routine
  48.